<?php

namespace module\index\subscribe;

use think\Event;
use app\model\Pay as Model;
// use EasyWeChat\Pay\Application;
use EasyWeChat\Factory;
// use EasyWeChat\Pay\Message;
use think\exception\HttpException;

class Pay
{
    private $app;

    public function __construct()
    {
        $this->app = Factory::payment(config('wechat.pay'));
    }
    public function onCreate(Model $model)
    {
        $response = $this->app->getClient()->postJson('v3/pay/transactions/jsapi', [
            'mchid' => config('wechat.pay.mch_id'),	// // string[1,32]	// 是	直连商户号	body 直连商户的商户号，由微信支付生成并下发。
            'out_trade_no' => '1217752501201407033233368018',	// string[6,32]	是 商户订单号	body 商户系统内部订单号，只能是数字、大小写字母_-*且在同一个商户号下唯一
            'appid' => config('wechat.app_id'),	// // string[1,32] 是	应用ID	body 由微信生成的应用ID，全局唯一。请求基础下单接口时请注意APPID的应用属性，例如公众号场景下，需使用应用属性为公众号的服务号APPID
            'description' => '小奇迹-QQ公仔',	// // string[1,127]	是	商品描述	body 商品描述
            'time_expire' => date('Y-m-d H:i:s', time() + 3600 * 24 * 14),	// string[1,64]	否 交易结束时间	body '2018-06-08T10:34:56+08:00' 订单失效时间，遵循rfc3339标准格式，格式为yyyy-MM-DDTHH:mm:ss+TIMEZONE，yyyy-MM-DD表示年月日，T出现在字符串中，表示time元素的开头，HH:mm:ss表示时分秒，TIMEZONE表示时区（+08:00表示东八区时间，领先UTC8小时，即北京时间）。例如：2015-05-20T13:29:35+08:00表示，北京时间2015年5月20日 13点29分35秒。
            'attach' => '自定义数据', 	// string[1,128]	否 附加数据	body 附加数据，在查询API和支付通知中原样返回，可作为自定义参数使用，实际情况下只有支付完成状态才会返回该字段。
            'notify_url' => 'https://' . config('app_host') . config('wechat.pay.return_url'),	// string[1,256]	是 通知地址	body异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。 公网域名必须为https，如果是走专线接入，使用专线NAT IP或者私有回调域名可使用http
            // 'goods_tag' => 'WXG',	// string[1,32]	否 订单优惠标记	body 订单优惠标记
            // 'support_fapiao' => false,	// boolean	否 电子发票入口开放标识	body 传入true时，支付成功消息和支付详情页将出现开票入口。需要在微信支付商户平台或微信公众平台开通电子发票功能，传此字段才可生效。
            'amount' => [ // object	是 订单金额	body 订单金额信息
                'total' => '100',	// int	是 总金额	订单总金额，单位为分。
                'currency' => 'CNY',	// string[1,16]	否 货币类型	CNY：人民币，境内商户号仅支持人民币。   
            ],	
            'payer' => [ // object	是 支付者	body 支付者信息
                'openid' => 'oUpF8uMuAJO_M2pxb1Q9zNjWeS6o',	// string[1,128]	是 用户标识	用户在直连商户appid下的唯一标识。 下单前需获取到用户的Openid，Openid获取详见
            ],	
            // 'detail' => [],	// object	否 优惠功能	body 优惠功能
            // 'scene_info' => [],	// object	否 场景信息	body 支付场景描述
            // 'settle_info' => [],	// object	否 结算信息	body 结算信息
        ])->toArray();
        $model->prepay_id = $response['prepay_id'];
    }
    public function onFinish(Model $model)
    {

    }
    public function subscribe(Event $event)
    {
        $event->listen('PayCreate', [$this,'onCreate']);
        $event->listen('PayFinish',[$this,'onFinish']);
    }
}
